#region Copyright (c) 2003, newtelligence AG. All rights reserved.

/*
// Copyright (c) 2003, newtelligence AG. (http://www.newtelligence.com)
// Original BlogX Source Code: Copyright (c) 2003, Chris Anderson (http://simplegeek.com)
// All rights reserved.
//  
// Redistribution and use in source and binary forms, with or without modification, are permitted 
// provided that the following conditions are met: 
//  
// (1) Redistributions of source code must retain the above copyright notice, this list of 
// conditions and the following disclaimer. 
// (2) Redistributions in binary form must reproduce the above copyright notice, this list of 
// conditions and the following disclaimer in the documentation and/or other materials 
// provided with the distribution. 
// (3) Neither the name of the newtelligence AG nor the names of its contributors may be used 
// to endorse or promote products derived from this software without specific prior 
// written permission.
//      
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS 
// OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY 
// AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER 
// IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 
// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// -------------------------------------------------------------------------
//
// Original BlogX source code (c) 2003 by Chris Anderson (http://simplegeek.com)
// 
// newtelligence is a registered trademark of newtelligence Aktiengesellschaft.
// 
// For portions of this software, the some additional copyright notices may apply 
// which can either be found in the license.txt file included in the source distribution
// or following this notice. 
//
*/

#endregion

using System;
using System.Collections.Specialized;
using System.Configuration;
using newtelligence.DasBlog.Runtime;

namespace newtelligence.DasBlog.Web.Core.Macros
{
    public class MacrosFactory
    {
        public static object CreateCustomMacrosInstance(SharedBasePage page, Entry item, string name)
        {
            NameValueCollection macroMap =
                ConfigurationManager.GetSection(MacroSectionHandler.ConfigSectionName) as NameValueCollection;

            if (macroMap != null && macroMap[name] != null)
            {
                string typeName = macroMap[name];
                return Activator.CreateInstance(Type.GetType(typeName), new object[] {page, item});
            }

            return null;
        }

        public static DayMacros CreateDayMacrosInstance(SharedBasePage page)
        {
            string typeName = typeof (DayMacros).AssemblyQualifiedName;
            NameValueCollection macroMap =
                ConfigurationManager.GetSection(MacroSectionHandler.ConfigSectionName) as NameValueCollection;

            if (macroMap != null && macroMap["daymacros"] != null)
            {
                typeName = macroMap["daymacros"];
            }

            return (DayMacros) Activator.CreateInstance(Type.GetType(typeName), new object[] {page});
        }

        public static EditMacros CreateEditMacrosInstance(SharedBasePage page)
        {
            string typeName = typeof (EditMacros).AssemblyQualifiedName;
            NameValueCollection macroMap =
                ConfigurationManager.GetSection(MacroSectionHandler.ConfigSectionName) as NameValueCollection;

            if (macroMap != null && macroMap["Editmacros"] != null)
            {
                typeName = macroMap["Editmacros"];
            }

            return (EditMacros) Activator.CreateInstance(Type.GetType(typeName), new object[] {page});
        }

        public static EditRadioMacros CreateEditRadioMacrosInstance(SharedBasePage page)
        {
            string typeName = typeof (EditRadioMacros).AssemblyQualifiedName;
            NameValueCollection macroMap =
                ConfigurationManager.GetSection(MacroSectionHandler.ConfigSectionName) as NameValueCollection;
            if (macroMap != null && macroMap["editradiomacros"] != null)
            {
                typeName = macroMap["editradiomacros"];
            }
            return (EditRadioMacros) Activator.CreateInstance(Type.GetType(typeName), new object[] {page});
        }

        public static EditRadioProperties CreateEditRadioPropertiesInstance(SharedBasePage page)
        {
            string typeName = typeof (EditRadioProperties).AssemblyQualifiedName;
            NameValueCollection macroMap =
                ConfigurationManager.GetSection(MacroSectionHandler.ConfigSectionName) as NameValueCollection;

            if (macroMap != null && macroMap["editradioprops"] != null)
            {
                typeName = macroMap["editradioprops"];
            }

            return (EditRadioProperties) Activator.CreateInstance(Type.GetType(typeName), new object[] {page});
        }

        public static Macros CreateMacrosInstance(SharedBasePage page)
        {
            string typeName = typeof (Macros).AssemblyQualifiedName;
            NameValueCollection macroMap =
                ConfigurationManager.GetSection(MacroSectionHandler.ConfigSectionName) as NameValueCollection;

            if (macroMap != null && macroMap["macros"] != null)
            {
                typeName = macroMap["macros"];
            }

            return (Macros) Activator.CreateInstance(Type.GetType(typeName), new object[] {page});
        }

        public static NewtelligenceProperties CreateNewtelligencePropertiesInstance(SharedBasePage page)
        {
            string typeName = typeof (NewtelligenceProperties).AssemblyQualifiedName;
            NameValueCollection macroMap =
                ConfigurationManager.GetSection(MacroSectionHandler.ConfigSectionName) as NameValueCollection;

            if (macroMap != null && macroMap["newtelligenceprops"] != null)
            {
                typeName = macroMap["newtelligenceprops"];
            }

            return (NewtelligenceProperties) Activator.CreateInstance(Type.GetType(typeName), new object[] {page});
        }

        public static RadioMacros CreateRadioMacrosInstance(SharedBasePage page)
        {
            string typeName = typeof (RadioMacros).AssemblyQualifiedName;
            NameValueCollection macroMap =
                ConfigurationManager.GetSection(MacroSectionHandler.ConfigSectionName) as NameValueCollection;

            if (macroMap != null && macroMap["radiomacros"] != null)
            {
                typeName = macroMap["radiomacros"];
            }

            return (RadioMacros) Activator.CreateInstance(Type.GetType(typeName), new object[] {page});
        }

        public static RadioProperties CreateRadioPropertiesInstance(SharedBasePage page)
        {
            string typeName = typeof (RadioProperties).AssemblyQualifiedName;
            NameValueCollection macroMap =
                ConfigurationManager.GetSection(MacroSectionHandler.ConfigSectionName) as NameValueCollection;

            if (macroMap != null && macroMap["radioprops"] != null)
            {
                typeName = macroMap["radioprops"];
            }

            return (RadioProperties) Activator.CreateInstance(Type.GetType(typeName), new object[] {page});
        }

        public static WeblogMacros CreateWeblogMacrosInstance(SharedBasePage page)
        {
            string typeName = typeof (WeblogMacros).AssemblyQualifiedName;
            NameValueCollection macroMap =
                ConfigurationManager.GetSection(MacroSectionHandler.ConfigSectionName) as NameValueCollection;

            if (macroMap != null && macroMap["weblogmacros"] != null)
            {
                typeName = macroMap["weblogmacros"];
            }

            return (WeblogMacros) Activator.CreateInstance(Type.GetType(typeName), new object[] {page});
        }
    }
}